﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ForrajeriaDB; //ESTE USING VA EN TODOS LOS ELEMENTOS DE ESTA CAPA
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace ForrajeriaDAL
{   
    public class MarcaDAL : AccesoDAL, InterfazDAL<MarcaMO>
    {
        private SqlCommand cmd; //var del comando sql

        #region Interfaz

        public List<MarcaMO> GetAll() // se redefine el metodo GetAll que se hereda de InterfazDAL
        {
            SqlDataReader reader = null;

            List<MarcaMO> lista = new List<MarcaMO>();
            try
            {

                cmd = new SqlCommand("Marca_GetALL", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;
                opencon();
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    MarcaMO aux = new MarcaMO();
                    aux.CodigoMarca = int.Parse(reader["codigoMarca"].ToString());
                    aux.Descripcion = reader["Descripcion"].ToString();
                    aux.Nombre = reader["Nombre"].ToString();
                    lista.Add(aux);
                }

               
                return lista;
            }
            catch (Exception ex)
            {
                closecon();//cierra la conexion
                throw ex; 
            }
            finally //finalmente cierro el reader que use para traer la consulta esto es importante ya que por alguna razon podria quedar abierto generando una conexion sin uso en la bd que estaria todo el tiempo abierta
            {
                closecon();
                closeReader(reader);
              
            }

        }

        public void Adicionar(MarcaMO item)
        {

            try
            {
                cmd = new SqlCommand("Marca_INSERT", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;
                               

                cmd.Parameters.Add("@Nombre", SqlDbType.VarChar, 50).Value = item.Nombre;
                cmd.Parameters.Add("@Descripcion", SqlDbType.VarChar, 250).Value = item.Descripcion;

                opencon();
                cmd.ExecuteNonQuery();
                closecon();

            }
            catch (Exception ex)
            {
               
            }
            
        }

        public void Eliminar(MarcaMO item)
        {
            try
            {
                cmd = new SqlCommand("Marca_Delete", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@codigoMarca", SqlDbType.Int).Value = item.CodigoMarca;

                opencon();
                cmd.ExecuteNonQuery();
                closecon();
            }
            catch (SqlException ex)
            {
                closecon();
                throw ex;
            }

        }

        public void Actualizar(MarcaMO nuevoItem, MarcaMO origItem)
        {
            try
            {
                cmd = new SqlCommand("Marca_UPDATE", getConexion());
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@codigoMarca", SqlDbType.Int).Value = origItem.CodigoMarca;
                cmd.Parameters.Add("@Nombre", SqlDbType.VarChar, 50).Value = nuevoItem.Nombre;
                cmd.Parameters.Add("@Descripcion", SqlDbType.VarChar, 250).Value = nuevoItem.Descripcion;

                opencon();
                cmd.ExecuteNonQuery();
                closecon();
                            
            }
            catch (Exception ex)
            {
                closecon();
                throw ex;
            }

        }
        #endregion

        #region Singleton

        private static MarcaDAL instanceMarca;

        private MarcaDAL()
            : base()
        {

        }

        public static MarcaDAL getInstance
        {
            get 
            {
                if (instanceMarca == null)
                {
                    instanceMarca = new MarcaDAL();
                }
                return instanceMarca;
            }
        }

        #endregion
    }

}
